package es.ucm.fdi.healthpred.vista;

import javax.swing.JTextField;
import javax.swing.text.AttributeSet;
import javax.swing.text.BadLocationException;
import javax.swing.text.PlainDocument;

/**
 * Caja de texto con n&uacutemero limitado de caracteres a elegir.
 * 
 * @since 1.0
 * 
 * @version 1.0
 * 
 * @author &Aacute;lvaro G&oacute;mez Porris
 * @author V&iacute;ctor L&oacute;pez Monte
 * @author Carlos Rodr&iacute;guez Colliga
 * 
 */
public class JTextFieldLimite extends PlainDocument {

	private static final long serialVersionUID = 1L;

	/**
	 * El editor del que estamos limitando caracteres.
	 */
	protected JTextField editor;

	/**
	 * N&uacute;mero m&aacute;ximo de caracteres que deseamos en el editor.
	 */
	protected int maxChars;

	/**
	 * Crea una instancia de JTextFieldLimite.
	 * 
	 * @param editor
	 *            Editor en el que se quieren limitar los caracteres.
	 * @param maxChars
	 *            N&uacute;mero m&aacute;ximo de caracteres que deseamos en el
	 *            editor.
	 */
	public JTextFieldLimite(JTextFieldFoco editor, int maxChars) {
		this.editor = editor;
		this.maxChars = maxChars;
	}

	/**
	 * @param editor
	 * @param maxChars
	 */
	public JTextFieldLimite(JTextFieldDigitosFoco editor, int maxChars) {
		this.editor = editor;
		this.maxChars = maxChars;
	}

	/**
	 * @return El editor
	 */
	public JTextField getEditor() {
		return editor;
	}

	/**
	 * @param editor
	 */
	public void setEditor(JTextFieldFoco editor) {
		this.editor = editor;
	}

	/**
	 * @return El n&uacute;mero m&aacute;ximo de caracteres admitidos.
	 */
	public int getMaxChars() {
		return maxChars;
	}

	/**
	 * @param maxChars
	 */
	public void setMaxChars(int maxChars) {
		this.maxChars = maxChars;
	}

	/**
	 * M&eacute;todo al que llama el editor cada vez que se intenta insertar
	 * caracteres. El m&eacute;todo comprueba que no se sobrepasa el
	 * l&iacute;mite. Si es as&iacute;, llama al m&eacute;todo de la clase padre
	 * para que se inserten los caracteres. Si se sobrepasa el l&iacute;mite,
	 * retorna sin hacer nada.
	 */
	public void insertString(int arg0, String arg1, AttributeSet arg2)
			throws BadLocationException {
		if ((editor.getText().length() + arg1.length()) <= maxChars)
			super.insertString(arg0, arg1, arg2);
	}

}
